﻿using Microsoft.AspNetCore.Mvc.Filters;

namespace Max.PH6_2006A.LowCode.API.HanlderLog
{
    //AOP：面向切面编程

    //定义中间件，就是一个类
    /*
     * 1、RequestDelegate
     * 2、HttpContext  .Invoke()
     * 3、注册（在Program.cs）
     * **/
    public class MyLogMiddleware
    {
        RequestDelegate _next;

        public MyLogMiddleware(RequestDelegate next)
        {
            _next = next;
        }

        public async Task InvokeAsync(HttpContext context)
        {
            Console.WriteLine("我的中间件的一些处理");

            await _next.Invoke(context);

            //await _next(context);
        }
    }

    //定义过滤器，也是一个类
    /*
     * 1、你定义什么过滤器，那么，你就继承什么过滤器的接口 （五种类型过滤器）
     *      授权：Authorization
     *      行为：Action
     *      异常：Exception
     *      结果：Result
     *      资源：Resource
     *  2、继承了接口，就是实现这个接口的方法
     *  3、需要注册（在Program.cs），这是在MVC的过滤器中添加
     * **/
    public class MyExceptionFilter : IExceptionFilter
    {
        //
        public void OnException(ExceptionContext context)
        {
            //在这里就可以对异常进行处理
            //打印打到控制台
            //写入数据库
            //.....
        }
    }
}
